package MCQReaderSystem;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
public class ImagePanel extends JPanel
{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private BufferedImage image;
    private int w;  	// largeur de l'image
    private int h;  	// hauteur de l'image
/**
* Le constructeur :
* @param filePath le fichier de l'image.
* @param x coordonnée x du coin supérieur gauche.
* @param y coordonnée y du coin supérieur gauche.
* @param width largeur de l'image.
* @param height hauteur de l'image.
*/
    public ImagePanel(String filePath, int x, int y, int width, int height)
    {
    	
        super(null, true);
        System.out.println("je suis ds Imagepanel");
        System.out.println(filePath);
		File fileImg = new File(filePath);
        try {
            image = ImageIO.read(fileImg);
        } catch (IOException e) {
            image = null;
            System.err.println("Est oui Fichier invalide");
        }
 
		if( width<=0 && height<=0){
			w = image.getWidth(this);
			h = image.getHeight(this);
		} else {
        	w = width;
        	h = height;
		}
		setBounds(x, y, w, h);
		//setOpaque(false);
		setBackground(Color.red );
        setVisible(true);
    }
 
	/**
	* ImagePanel au dimensions de l'image originale
	* @param filePath Chemin l'image.
	* @param x coordonnée x du coin supérieur gauche.
	* @param y coordonnée y du coin supérieur gauche.
	*/
	public ImagePanel(String filePath, int x, int y)
	{
		this( filePath, x, y, 0, 0);
	}
 
    /*
	 * Applique une rotation de <code>scale</code> radians à la propriété <code>image</code>
	 * @param scale Angle de rotation (max: 2*pi) */

    public void rotate(double scale)
    {
	double sinA = Math.sin(scale);
	
	AffineTransform tx = new AffineTransform();
	tx.rotate(scale, this.image.getWidth() / 2, this.image.getHeight() / 2);
	AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
	
	Rectangle rect = op.getBounds2D(this.image).getBounds();
	tx.translate(sinA * rect.getX(), -sinA * rect.getY());
	op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
	this.image = op.filter(this.image, op.createCompatibleDestImage(this.image, null) );
	
	
	//C'est ça qui foutait le dawa!
	this.setBounds( getX(), getY(), image.getWidth(), image.getHeight()  );
	this.w = image.getWidth();
	this.h = image.getHeight();

	BufferedImage bimg = new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_RGB);
	bimg.createGraphics().drawImage(image, null, null);
	
	File f = new File("kane.gif");
	try {
	    if(!ImageIO.write(bimg, "gif", f))
		JOptionPane.showMessageDialog(null, "Ecriture impossible : ");
	}catch (IOException e) { 
	    
	}
    }
    
    /**
     * Gere l'affichage graphique du JPanel, ainsi que le refraichissement.
     */
    public void paint(Graphics g)
    {
	g.drawImage(image, 0, 0, w, h, null);
	g.drawRect(0,0,w+1,h+1);
    }
}